import router from './router'
import { useAccountStore } from './store/account'
import { getToken } from '@/utils/auth'
import { isHttp } from '@/utils/app'
import _ from 'lodash'

import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

const whiteList = ['/login', '/logout', '/register']

router.beforeEach((to, from, next) => {
  NProgress.start()
  // console.log(to.path, from.path)
  // 白名单直接通过
  if (whiteList.indexOf(to.path) !== -1) {
    next()
    return
  }

  // 登录校验
  if (!getToken()) {
    next(`/login?redirect=${to.fullPath}`)
    return
  }

  const accountStore = useAccountStore()

  // 用户信息已拉取 => 正常通行
  if (!_.isEmpty(accountStore.permissions)) {
    next()
    return
  }

  // 第一次登录或浏览器刷新时pinia数据为空，重新拉取用户信息
  accountStore
    .GetInfo()
    .then(() => {
      // 校验用户是否有权限，避免进入死循环
      if (_.isEmpty(accountStore.permissions)) {
        throw new Error('用户没有分配任何权限')
      }

      //  添加动态路由信息
      accountStore.routes.forEach((route) => {
        // console.log(route,'add route')
        router.addRoute(route)
      })
      // console.log(router.getRoutes(),'add-after')
      // hack方法 确保addRoutes已完成
      next({ ...to, replace: true })
    })
    .catch((err) => {
      console.log(err)
      // 拉取用户信息出现异常,重新登录
      next(`/login?redirect=${to.fullPath}`)
    })
})

router.afterEach(() => {
  NProgress.done()
})
